#ifndef _INTERFACE_H
#define _INTERFACE_H

#include <gtk/gtk.h> 

#include "app.h"

#define ITEM_SELL_L	252			/* 元素格长度 */
#define ITEM_SELL_H	40			/* 元素格高度 */

#define SCROOL_WINDOW_L	300		/* 滚动窗口的长度 */
#define SCROOL_WINDOW_H	550		/* 滚动窗口的高度 */

/*好友列表行枚举*/
enum {
  COLUMN = 0,	
  NUM_COLS
};

#define IMAGE_FILE_DIR "./package/client/app/gtk_menu_app/image"

enum interface_err{
	INTERFACE_PARAM_NULL = 1,
	INTERFACE_CALL_SUB_ERR,
};


enum menu {
	LOGIN_V,	/* 登录界面 */
	SIGN_V,		/* 注册界面 */
	FRIEND_V,	/* 好友界面 */
	CHAT_V,		/* 聊天对话框界面 */
};

enum user_input_result {
	ACCOUNT_EXIST_PASSWORD_RIGHT,	
	ACCOUNT_EXIST_PASSWORD_ERROR,
	ACCOUNT_NOEXIST,
	CONNECT_SERVER_FAIL,
};

struct login_v {
    GtkWidget *window;	
    GtkWidget *box;
    GtkWidget *fixed_box;			
    GtkWidget *background;			/* 界面总背景 */
	GtkWidget *oicq_logo_image;		/* OICQ字样log */
	GtkWidget *portrait_image;		/* 头像 */
	GtkEntryBuffer *entry_buffer_text_account;		/* 账号输入框缓冲区 */
	GtkEntryBuffer *entry_buffer_text_password;		/* 密码输入框缓冲区 */

	GtkWidget *entry_account;		/* 账号输入框 */
	GtkWidget *entry_password;		/* 密码输入框 */

	GtkWidget *hint_lable;			/* 提示信息 */

	GtkWidget *button_login;		/* 登录按钮 */
	GtkWidget *eventbox_login;		/* 登录按钮的事件处理box */
	GtkWidget *button_iconify;		/* 最小化按钮 */
	GtkWidget *eventbox_iconify;	/* 最小化按的事件处理box */
	GtkWidget *button_close;		/* 关闭按钮 */
	GtkWidget *eventbox_close;		/* 关闭按钮的事件处理box */
	GtkWidget *button_register;		/* 注册按钮 */
	GtkWidget *eventbox_register;	/* 注册按钮 */
};

struct regist_v {
	GtkWidget *window;	
    GtkWidget *box;
    GtkWidget *fixed_box;
    GtkWidget *background;			/* 界面总背景 */
	
	GtkWidget *entry_name;			/* 昵称输入框 */
	GtkWidget *entry_account;		/* 账号输入框 */
	GtkWidget *entry_password;		/* 密码输入框 */
	GtkWidget *entry_password_again;/* 密码输入框 */
	GtkWidget *label_name;			/* 账号文字标签 */
	GtkWidget *label_account;		/* 账号文字标签 */
	GtkWidget *label_password;		/* 密码文字标签 */
	GtkWidget *label_password_again;/* 密码文字标签 */

	GtkWidget *hint_lable;			/* 提示信息 */
	
	GtkWidget *button_iconify;		/* 最小化按钮 */
	GtkWidget *eventbox_iconify;	/* 最小化按钮事件处理box */
	GtkWidget *button_close;		/* 关闭按钮 */
	GtkWidget *eventbox_close;		/* 关闭按钮事件处理box */
	
	GtkWidget *button_register;		/* 注册按钮 */
	GtkWidget *eventbox_register;	/* 注册按钮事件处理box */
	GtkWidget *button_return;		/* 返回按钮 */
	GtkWidget *eventbox_return;		/* 返回按钮事件处理box */
};

struct tree {
	GtkWidget *window;
	GtkWidget *backg;
	GtkWidget *treeview;				
	GtkTreeModel *model;				/* 数据模型 */
	GtkTreeStore *treestore;			/* 数据节点存储区 */
	GtkTreeViewColumn *col;				/* 列 */
	

 	GtkTreeIter iter_level_1;			/* 一级节点指针 */
	GtkTreeIter iter_level_2;			/* 二级节点指针 */

	GtkCellRenderer *renderer;			/* 渲染组件 */
	GtkTreeSelection *tree_selection;	/* 选择树元素 */
};

struct friend_v{
    GtkWidget *window;	
    GtkWidget *box;
    GtkWidget *fixed_box;			
	GtkWidget *treelist_window;		/* 好友列表box */
	GtkWidget *background;			/* 界面总背景 */
	GtkWidget *label_name;			/* 账号文字标签 */
	
	GtkWidget *label_friend_account;/* 账号文字标签 */
	GtkWidget *entry_friend_account;/* 好友账号输入框 */
	GtkWidget *button_add;			/* 添加好友按钮 */
	GtkWidget *button_remove;		/* 删除好友按钮 */
	GtkWidget *hint_lable;			/* 提示信息 */

	GtkWidget *button_iconify;
	GtkWidget *eventbox_iconify;
	GtkWidget *button_close;
	GtkWidget *eventbox_close;

	struct tree *friend_treelist;	/* 好友列表 */	
};

struct chat_v {
	GtkWidget *window;	
	GtkWidget *box;
    GtkWidget *fixed_box;
	GtkWidget *fixed_box_history;
	GtkWidget *fixed_box_edit;
	GtkWidget *background;			/* 界面总背景 */
	GtkWidget *background_edit;		/* 输入框背景框架 */

	GtkWidget *text_view_history;	/* 聊天历史信息 */	
	GtkWidget *text_view_edit;		/* 用户输入内容框 */
	GtkTextBuffer *buffer_edit; 	/* 用户输入框缓冲内容 */
	GtkTextBuffer *buffer_history; 	/* 用户输入框缓冲内容 */
	GtkTextIter history_start;		/* 历史框开头位置 */
	GtkTextIter history_end;		/* 历史框末尾位置 */

	
	GtkWidget *scrolled_window_history;/* 历史框框滚动窗口 */
	GtkWidget *scrolled_window_edit;/* 输入框滚动窗口 */

	GtkWidget *button_send;			/* 发送按钮*/
	GtkWidget *button_iconify;		
	GtkWidget *eventbox_iconify;
	GtkWidget *button_close;
	GtkWidget *eventbox_close;
};

/*所有界面的控件*/
struct view_app {
    struct login_v login_view_data;		/* 登录界面的界面数据 */
	struct regist_v regist_view_data;	/* 注册界面的界面数据 */
    struct friend_v friend_view_data;	/* 好友界面的界面数据 */
	struct chat_v chat_view_data;		/* 聊天框界面的界面数据 */
	enum menu next_view;				/* 界面选项 */
};

/*界面主要结构体，包含所有界面的控件与本程序说用到的全局资源*/
struct interface {
	struct view_app view;
	struct app *p_app;
	char chating_friend_account[ACCOUNT_LENGTH]; /*正在聊天的好友账号*/
};

typedef int (*view_func)(struct interface *);
struct view {
	view_func login_view;	
	view_func regist_view;
	view_func friend_view;
	view_func chat_view;
};

/*运行界面*/
extern int view_run(struct interface *p_interface);
/* 界面管理 */
extern int view_manage(struct interface *interfaced);
/* 创建登录界面  */   
extern int login_view(struct interface *interfaced);
/* 创建注册界面  */                     
extern int regist_view(struct interface *interfaced);
/* 创建好友界面  */                   
extern int friend_view(struct interface *interfaced);
/* 创建聊天界面 */            
extern int chat_view(struct interface *interfaced);
/* 更新好友表 */
extern int updata_friend_store(struct interface *interfaced);


#endif
